Clickjacking with form input data prefilled from a URL parameter
Clickjacking combinado con prefill de formulario: la página de cuenta rellena el campo email desde un parámetro URL y un iframe transparente engaña al usuario a enviar el cambio.
Target Overview & Vulnerability Summary
Este lab extiende el caso básico de clickjacking: la página de cuenta pre-rellena el campo email del formulario a partir de un parámetro de la URL. El atacante combina (a) el prefilling del campo con la dirección deseada y (b) un iframe transparente superpuesto, de modo que la víctima solo tiene que hacer clic en un "Update email" que percibe como parte de la página.
| Campo | Valor |
|---|---|
| Severidad | Media-Alta (cambio de email autenticado vía interacción engañosa con datos pre-cargados) |
| Endpoint vulnerable | /my-account (formulario de cambio de email con prefill vía parámetro) |
| Root cause | Prefill de formulario desde parámetro URL + ausencia de X-Frame-Options/frame-ancestors |
Credenciales del laboratorio: wiener:peter. La víctima usa Chrome: probar el exploit en ese navegador.
Technical Breakdown & Exploitation Flow
1. Comportamiento del prefill
El formulario de cambio de email de /my-account acepta un parámetro que pre-rellena el valor del campo (en este lab, el email). El atacante prepara:
https://<LAB-ID>.web-security-academy.net/my-account?email=attacker@evil.com
Al cargarse en un iframe, el campo email ya contiene attacker@evil.com; la víctima solo dispara el submit con un clic engañoso.
2. Construcción del exploit con ClickBandit
Burp Suite dispone de la herramienta ClickBandit, que automatiza la generación del HTML de clickjacking:
- Copiar el snippet de ClickBandit.
- Permitir pegar ("allow pasting") y pegar el comando de consola del navegador.
- Pulsar "Start".
- Interactuar con la UI embebida: hacer clic en "Update email" (la acción que se quiere orquestar).
- Pulsar "Finish".
- ClickBandit descarga el HTML final con el iframe, el posicionamiento del señuelo y la secuencia de clics codificados.
El HTML resultante embebe la página target en un iframe transparente, posiciona el señuelo sobre el botón de envío y, al hacer clic la víctima en "Click me", el formulario pre-rellenado se envía cambiando el email.
Root Cause Analysis
Dos deficiencias se combinan:
- Prefill desde parámetro URL: el formulario acepta un valor de la URL para rellenar un campo de cambio de estado sin validar que esa capacidad no se use de forma abusiva. Cualquier enlace puede precargar el email del atacante.
- Framing permitido: sin
X-Frame-Optionsni CSPframe-ancestors, la página puede embeberse en un iframe opaco y el clic se orquesta por el atacante.
El CSRF token no mitiga: la request es legítima, originada por el navegador de la víctima, con token válido y cookie de sesión.
Secure Remediation
- Bloquear el framing de páginas que mutan estado:
X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'none'
- No rellenar campos de cambio de estado desde parámetros de URL sin validación estricta (o eliminar la feature de prefill para campos sensibles como el email).
- En la request de cambio de email, exigir re-autenticación o verificación por correo del nuevo valor antes de aplicar la mutación.
- Considerar
SameSite=Lax+ validación deOrigin/Sec-Fetch-Siteen el endpoint de cambio.